#include <timer_interrupt.h>

/**
 * @brief  TIM3初始化
 * @param  arr: 自动重装载值。
 *              此参数必须是介于 0x0000 和 0xFFFF 之间的数字。
 * @param  psc: 预分频系数。
 *              此参数可以是 0x0000 和 0xFFFF 之间的数字
 * @retval None
 */
void TIM3_int_init(u16 arr, u16 psc)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;
    NVIC_InitTypeDef NVIC_InitStrue;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 使能定时器3时钟

    TIM_TimeBaseInitStrue.TIM_ClockDivision = TIM_CKD_DIV1;       // 时钟划分(定时器中断中用不到，随便选个有效值)
    TIM_TimeBaseInitStrue.TIM_CounterMode   = TIM_CounterMode_Up; // 计数模式
    TIM_TimeBaseInitStrue.TIM_Period        = arr;                // 自动重装载值
    TIM_TimeBaseInitStrue.TIM_Prescaler     = psc;                // 预分频系数
    // TIM_TimeBaseInitStrue.TIM_RepetitionCounter = ;            // 重复计数器(定时器中断中用不到)

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStrue); // 初始化定时器3

    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); // 使能更新中断

    NVIC_InitStrue.NVIC_IRQChannel                   = TIM3_IRQn;
    NVIC_InitStrue.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStrue.NVIC_IRQChannelSubPriority        = 0;
    NVIC_Init(&NVIC_InitStrue); // 初始化NVIC

    TIM_Cmd(TIM3, ENABLE); // 使能定时器
}

/**
 * @brief  TIM3中断服务函数
 * @param  None
 * @retval None
 */
void TIM3_IRQHandler(void)
{
    // 判断是否为更新中断
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
    {
        /* 更新中断处理代码 */

        TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除中断标志位
    }
}
